
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently

#pragma once

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // Exclude rarely-used stuff from Windows headers
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // some CString constructors will be explicit

// turns off MFC's hiding of some common and often safely ignored warning messages
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions


#include <afxdisp.h>        // MFC Automation classes



#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC support for Internet Explorer 4 Common Controls
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // MFC support for ribbons and control bars









#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif


namespace utility
{

	inline CString getAppPath()
	{
		static CString g_sDllPath = _T("");

		if (g_sDllPath.IsEmpty())
		{
			TCHAR	buffer[MAX_PATH];
			ZeroMemory(buffer, sizeof(TCHAR)* MAX_PATH);
			HMODULE h = GetModuleHandle(NULL);
			::GetModuleFileName(h, buffer, MAX_PATH);
			::PathRemoveFileSpec(buffer);
			g_sDllPath = buffer;
			g_sDllPath += _T("\\");
		}
		return g_sDllPath;
	}

	inline BOOL registerDll(const CString& sFilePath)
	{
		if (!PathFileExists(sFilePath))
			return FALSE;

		typedef LRESULT(*DllRegisterServerProc)(void);
		BOOL retVal = FALSE;
		HINSTANCE hDll = LoadLibrary(sFilePath);
		while (TRUE)
		{
			if (hDll == NULL)
				break;
			DllRegisterServerProc DllRegisterServer;
			DllRegisterServer = (DllRegisterServerProc)GetProcAddress(hDll, "DllRegisterServer");
			if (DllRegisterServer == NULL)
				break;

			int temp = DllRegisterServer();
			if (temp != S_OK)
				break;

			retVal = TRUE;
			break;
		}

		if (retVal == FALSE)
		{
			//	LOG__(ERR, _T("register dll failed,%s"), sFilePath);
		}

		FreeLibrary(hDll);
		return retVal;
	}

}